package clases.notas;

import CapaDatos.DataSource;
import CapaDatos.Sql;
import clases.incio.Paginacion;
import javax.swing.JLabel;
import javax.swing.JTable;

import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;

/**
 *
 * @author Jose Daniel
 */
public class Notas extends Parcial {

    private int tareas = 5;
    private int actividades = 5;
    private int grupal = 2;
    private int lecciones = 4;
    private int evaluacion = 1;
    private String sql;
    private DefaultTableModel modelo;
    public Paginacion objPaginacion;
    private DataSource dt;

    public Notas() {
        modelo = new DefaultTableModel();
        objPaginacion = new Paginacion();
        dt = new DataSource();
    }

    private int MaxAsistencia() {
        return Sql.getMax("IDASISTENCIA", "INASISTENCIA", true);
    }

    public int maxNota() {
        return Sql.getMax("IDLIBRETA", "LIBRETA", true);
    }

    public void insertarInasistencia(DefaultTableModel modelo) {
        int c, f;
        for (int a = 0; a < modelo.getRowCount(); a++) {
            c = 3;
            for (int t = 1; t <= 3; t++) {
                //  Sql.insertar("INSERT INTO INASISTENCIA VALUES(" + MaxAsistencia() + ",'" + extraerAlumno(modelo.getValueAt(a, 0).toString()) + "',"
                //        + "                                    " + t + "," + super.getIdParcial() + "," + super.getIdQuimestre() + "," + modelo.getValueAt(a, c) + ") ");
                c++;
            }

        }
    }


    public void insertarNotas(String docente, String curso,String materia,DefaultTableModel modelo) {
        this.modelo = modelo;

        int libreta;
        for (int a = 0; a < modelo.getRowCount(); a++) {

            //INSERTAR LIBRETA
            libreta = this.maxNota();
            Sql.insertar("INSERT INTO LIBRETA VALUES(" + libreta + "," + super.getIdParcial() + "," + super.getIdQuimestre() + "," + this.extraerDocente(docente,materia,curso) + "," + this.extraerAlumno(modelo.getValueAt(a, 0).toString(), curso) + ","
                    + " " + this.extraerEscala(modelo.getValueAt(a, 25).toString()) + " ," + modelo.getValueAt(a, 27) + "," + modelo.getValueAt(a, 26) + "," + modelo.getValueAt(a, 24) + ")");

            //BLOQUE DE TAREAS
            for (int c = 3; c <= 7; c++) {
                Sql.insertar("INSERT INTO NOTA VALUES(" + (Sql.getMax("IDNOTA", "NOTA", true)) + "," + libreta + ",1," + modelo.getValueAt(a, c) + " ) ");
            }

            //BLOQUE DE ACTIVIDADES
            for (int c = 9; c <= 13; c++) {
                Sql.insertar("INSERT INTO NOTA VALUES(" + (Sql.getMax("IDNOTA", "NOTA", true)) + "," + libreta + ",2," + modelo.getValueAt(a, c) + " ) ");
            }

            //BLOQUE DE GRUPAL
            for (int c = 15; c <= 16; c++) {
                Sql.insertar("INSERT INTO NOTA VALUES(" + (Sql.getMax("IDNOTA", "NOTA", true)) + "," + libreta + ",3," + modelo.getValueAt(a, c) + " ) ");
            }
            //BLOQUE DE LECCIONES
            for (int c = 18; c <= 21; c++) {
                Sql.insertar("INSERT INTO NOTA VALUES(" + (Sql.getMax("IDNOTA", "NOTA", true)) + "," + libreta + ",4," + modelo.getValueAt(a, c) + " ) ");
            }

            //BLOQUE DE EVALUACION
            Sql.insertar("INSERT INTO NOTA VALUES(" + (Sql.getMax("IDNOTA", "NOTA", true)) + "," + libreta + ",5," + modelo.getValueAt(a, 23) + " ) ");

        }

    }

    private String extraerDocente(String docente, String materia, String curso) {
        String id="";
              sql = "SELECT IDMATERIADOCENTE FROM MATERIADOCENTE WHERE IDMATERIAPERIODOCURSO \n"
                + "IN (SELECT IDMATERIAPERIODOCURSO FROM MATERIAPERIODOCURSO WHERE IDPERIODOCURSO \n"
                + "IN (SELECT IDPERIODOCURSO FROM PERIODOCURSO WHERE IDCURSO IN \n"
                + "(SELECT IDCURSO FROM CURSO JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "WHERE CONCAT(CURSO,' ',PARALELO)='" + curso + "') \n"
                + "AND IDPERIODO IN (SELECT IDPERIODO FROM PERIODO \n"
                + "WHERE ESTADO=TRUE)) \n"
                + "AND IDMATERIA IN (SELECT IDMATERIA \n"
                + "FROM MATERIA WHERE MATERIA='" + materia + "') ) \n"
                + "AND CEDULARUC IN (SELECT PERSONAL.CEDULARUC FROM PERSONAL \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=PERSONAL.CEDULARUC "
                + "WHERE CONCAT(APELLIDO,' ',NOMBRE)='" + docente + "') ";
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
          id= String.valueOf(dt.getInt(1));
        }
        return id;
       
    }


    private String extraerAlumno(String alumno, String curso) {
        return Sql.getDato("MATRICULACURSO.IDMATRICULACURSO", " MATRICULACURSO JOIN MATRICULA ON "
                + "MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO", "MATRICULA.CEDULARUC='" + alumno + "' AND CONCAT(CURSO.CURSO,' ',PARALELO.PARALELO)='" + curso + "'");
    }

    public String SqlGeneralNotas() {
        sql="SELECT CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE) AS ALUMNO,CONCAT(CURSO.CURSO,' ',PARALELO.PARALELO) AS CURSO,MATERIA.MATERIA,QUIMESTRE.NOMBRE AS QUIMESTRE,PARCIAL.PARCIAL ,LIBRETA.PROMEDIO,ESCALA.ABREVIATURA FROM LIBRETA JOIN QUIMESTRE ON LIBRETA.IDQUIMESTRE=QUIMESTRE.IDQUIMESTRE JOIN PARCIAL ON LIBRETA.IDPARCIAL=PARCIAL.IDPARCIAL JOIN ESCALA ON ESCALA.IDESCALA=LIBRETA.IDESCALA\n"
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULACURSO=LIBRETA.IDMATRICULACURSO JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATRICULACURSO.IDPERIODOCURSO JOIN\n"
                + "PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO JOIN MATRICULA ON MATRICULA.IDMATRICULA=MATRICULACURSO.IDMATRICULA JOIN PERSONA ON MATRICULA.CEDULARUC=PERSONA.CEDULARUC \n"
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO JOIN MATERIADOCENTE \n"
                + "                ON LIBRETA.IDMATERIADOCENTE=MATERIADOCENTE.IDMATERIADOCENTE JOIN MATERIAPERIODOCURSO ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO\n"
                + "                JOIN MATERIA ON MATERIAPERIODOCURSO.IDMATERIA=MATERIA.IDMATERIA\n"
                + "\n"
                + "WHERE(PERIODO.ESTADO='TRUE' AND MATRICULA.ESTADO='TRUE' ) ORDER BY ALUMNO";
        return sql;
    }
    
    public String SqlNotasAlumno(String alumno) {
        sql="SELECT CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE) AS ALUMNO,CONCAT(CURSO.CURSO,' ',PARALELO.PARALELO) AS CURSO,MATERIA.MATERIA,QUIMESTRE.NOMBRE AS QUIMESTRE,PARCIAL.PARCIAL ,LIBRETA.PROMEDIO,ESCALA.ABREVIATURA FROM LIBRETA JOIN QUIMESTRE ON LIBRETA.IDQUIMESTRE=QUIMESTRE.IDQUIMESTRE JOIN PARCIAL ON LIBRETA.IDPARCIAL=PARCIAL.IDPARCIAL JOIN ESCALA ON ESCALA.IDESCALA=LIBRETA.IDESCALA\n"
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULACURSO=LIBRETA.IDMATRICULACURSO JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATRICULACURSO.IDPERIODOCURSO JOIN\n"
                + "PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO JOIN MATRICULA ON MATRICULA.IDMATRICULA=MATRICULACURSO.IDMATRICULA JOIN PERSONA ON MATRICULA.CEDULARUC=PERSONA.CEDULARUC \n"
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO JOIN MATERIADOCENTE \n"
                + "                ON LIBRETA.IDMATERIADOCENTE=MATERIADOCENTE.IDMATERIADOCENTE JOIN MATERIAPERIODOCURSO ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO\n"
                + "                JOIN MATERIA ON MATERIAPERIODOCURSO.IDMATERIA=MATERIA.IDMATERIA\n"
                + "\n"
                + "WHERE(PERIODO.ESTADO='TRUE' AND MATRICULA.ESTADO='TRUE' "
                + "AND CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE) LIKE ('"+alumno+"%')) ORDER BY ALUMNO";
        return sql;
    }
    
    public String SqlNotasMateria(String materia) {
        sql="SELECT CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE) AS ALUMNO,CONCAT(CURSO.CURSO,' ',PARALELO.PARALELO) AS CURSO, MATERIA.MATERIA, QUIMESTRE.NOMBRE AS QUIMESTRE,PARCIAL.PARCIAL ,LIBRETA.PROMEDIO,ESCALA.ABREVIATURA FROM LIBRETA JOIN QUIMESTRE ON LIBRETA.IDQUIMESTRE=QUIMESTRE.IDQUIMESTRE JOIN PARCIAL ON LIBRETA.IDPARCIAL=PARCIAL.IDPARCIAL JOIN ESCALA ON ESCALA.IDESCALA=LIBRETA.IDESCALA\n"
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULACURSO=LIBRETA.IDMATRICULACURSO JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATRICULACURSO.IDPERIODOCURSO JOIN\n"
                + "PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO JOIN MATRICULA ON MATRICULA.IDMATRICULA=MATRICULACURSO.IDMATRICULA JOIN PERSONA ON MATRICULA.CEDULARUC=PERSONA.CEDULARUC \n"
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO JOIN MATERIADOCENTE \n"
                + "                ON LIBRETA.IDMATERIADOCENTE=MATERIADOCENTE.IDMATERIADOCENTE JOIN MATERIAPERIODOCURSO ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO\n"
                + "                JOIN MATERIA ON MATERIAPERIODOCURSO.IDMATERIA=MATERIA.IDMATERIA\n"
                + "\n"
                + "WHERE(PERIODO.ESTADO='TRUE' AND MATRICULA.ESTADO='TRUE' "
                + "AND MATERIA.MATERIA = '"+materia+"') ORDER BY ALUMNO";
        System.out.println(sql);
        return sql;
    }
    
    public String SqlNotasCurso(String curso) {
        sql="SELECT CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE) AS ALUMNO,CONCAT(CURSO.CURSO,' ',PARALELO.PARALELO) AS CURSO, MATERIA.MATERIA, QUIMESTRE.NOMBRE AS QUIMESTRE,PARCIAL.PARCIAL ,LIBRETA.PROMEDIO,ESCALA.ABREVIATURA FROM LIBRETA JOIN QUIMESTRE ON LIBRETA.IDQUIMESTRE=QUIMESTRE.IDQUIMESTRE JOIN PARCIAL ON LIBRETA.IDPARCIAL=PARCIAL.IDPARCIAL JOIN ESCALA ON ESCALA.IDESCALA=LIBRETA.IDESCALA\n"
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULACURSO=LIBRETA.IDMATRICULACURSO JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATRICULACURSO.IDPERIODOCURSO JOIN\n"
                + "PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO JOIN MATRICULA ON MATRICULA.IDMATRICULA=MATRICULACURSO.IDMATRICULA JOIN PERSONA ON MATRICULA.CEDULARUC=PERSONA.CEDULARUC \n"
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO JOIN MATERIADOCENTE \n"
                + "                ON LIBRETA.IDMATERIADOCENTE=MATERIADOCENTE.IDMATERIADOCENTE JOIN MATERIAPERIODOCURSO ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO\n"
                + "                JOIN MATERIA ON MATERIAPERIODOCURSO.IDMATERIA=MATERIA.IDMATERIA\n"
                + "\n"
                + "WHERE(PERIODO.ESTADO='TRUE' AND MATRICULA.ESTADO='TRUE' "
                + "AND CONCAT(CURSO.CURSO,' ',PARALELO.PARALELO) = '"+curso+"') ORDER BY ALUMNO";
        return sql;
    }
    
    public String SqlNotasQuimistre(String quimistre) {
        sql="SELECT CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE) AS ALUMNO,CONCAT(CURSO.CURSO,' ',PARALELO.PARALELO) AS CURSO, MATERIA.MATERIA, QUIMESTRE.NOMBRE AS QUIMESTRE,PARCIAL.PARCIAL ,LIBRETA.PROMEDIO,ESCALA.ABREVIATURA FROM LIBRETA JOIN QUIMESTRE ON LIBRETA.IDQUIMESTRE=QUIMESTRE.IDQUIMESTRE JOIN PARCIAL ON LIBRETA.IDPARCIAL=PARCIAL.IDPARCIAL JOIN ESCALA ON ESCALA.IDESCALA=LIBRETA.IDESCALA\n"
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULACURSO=LIBRETA.IDMATRICULACURSO JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATRICULACURSO.IDPERIODOCURSO JOIN\n"
                + "PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO JOIN MATRICULA ON MATRICULA.IDMATRICULA=MATRICULACURSO.IDMATRICULA JOIN PERSONA ON MATRICULA.CEDULARUC=PERSONA.CEDULARUC \n"
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO JOIN MATERIADOCENTE \n"
                + "                ON LIBRETA.IDMATERIADOCENTE=MATERIADOCENTE.IDMATERIADOCENTE JOIN MATERIAPERIODOCURSO ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO\n"
                + "                JOIN MATERIA ON MATERIAPERIODOCURSO.IDMATERIA=MATERIA.IDMATERIA\n"
                + "\n"
                + "WHERE(PERIODO.ESTADO='TRUE' AND MATRICULA.ESTADO='TRUE' "
                + "AND QUIMESTRE.NOMBRE = '"+quimistre+"') ORDER BY ALUMNO";
        return sql;
    }
    
    public String SqlNotasParcial(String parcial) {
        sql="SELECT CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE) AS ALUMNO,CONCAT(CURSO.CURSO,' ',PARALELO.PARALELO) AS CURSO, MATERIA.MATERIA, QUIMESTRE.NOMBRE AS QUIMESTRE,PARCIAL.PARCIAL ,LIBRETA.PROMEDIO,ESCALA.ABREVIATURA FROM LIBRETA JOIN QUIMESTRE ON LIBRETA.IDQUIMESTRE=QUIMESTRE.IDQUIMESTRE JOIN PARCIAL ON LIBRETA.IDPARCIAL=PARCIAL.IDPARCIAL JOIN ESCALA ON ESCALA.IDESCALA=LIBRETA.IDESCALA\n"
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULACURSO=LIBRETA.IDMATRICULACURSO JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATRICULACURSO.IDPERIODOCURSO JOIN\n"
                + "PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO JOIN MATRICULA ON MATRICULA.IDMATRICULA=MATRICULACURSO.IDMATRICULA JOIN PERSONA ON MATRICULA.CEDULARUC=PERSONA.CEDULARUC \n"
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO JOIN MATERIADOCENTE \n"
                + "                ON LIBRETA.IDMATERIADOCENTE=MATERIADOCENTE.IDMATERIADOCENTE JOIN MATERIAPERIODOCURSO ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO\n"
                + "                JOIN MATERIA ON MATERIAPERIODOCURSO.IDMATERIA=MATERIA.IDMATERIA\n"
                + "\n"
                + "WHERE(PERIODO.ESTADO='TRUE' AND MATRICULA.ESTADO='TRUE' "
                + "AND PARCIAL.PARCIAL = '"+parcial+"') ORDER BY ALUMNO";
        return sql;
    }

      
    
    public void ConsultaNotas(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("Nº");
        modelo.addColumn("ALUMNO");
        modelo.addColumn("CURSO");
        modelo.addColumn("MATERIA");
        modelo.addColumn("QUIMISTRE");
        modelo.addColumn("PARCIAL");
        modelo.addColumn("PROMEDIO");
        modelo.addColumn("ABREVIATURA");
       
        DefaultTableCellRenderer N = new DefaultTableCellRenderer();
        DefaultTableCellRenderer d = new DefaultTableCellRenderer();
        N.setHorizontalAlignment(SwingConstants.CENTER);
        d.setHorizontalAlignment(SwingConstants.RIGHT);
        tabla.getColumnModel().getColumn(0).setCellRenderer(N);
        tabla.getColumnModel().getColumn(6).setCellRenderer(d);
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(20);
        columna = tabla.getColumnModel().getColumn(1);
        columna.setPreferredWidth(200);
        columna = tabla.getColumnModel().getColumn(2);
        columna.setPreferredWidth(200);
        columna = tabla.getColumnModel().getColumn(3);
        columna.setPreferredWidth(100);
        columna = tabla.getColumnModel().getColumn(4);
        columna.setPreferredWidth(40);
        columna = tabla.getColumnModel().getColumn(5);
        columna.setPreferredWidth(40);
        columna = tabla.getColumnModel().getColumn(6);
        columna.setPreferredWidth(40);
        columna = tabla.getColumnModel().getColumn(7);
        columna.setPreferredWidth(40);
       
        sql = objPaginacion.getPaginacion(sql, pagina, 50);
        Sql.getConsulta(sql, dt);

        String[] fila;
        int n = (pagina*50)-49;
        while (dt.next()) {
            fila = new String[9];
            fila[0] = Integer.toString(n);
            fila[1] = dt.getString(1);
            fila[2] = dt.getString(2);
            fila[3] = dt.getString(3);
            fila[4] = dt.getString(4);
            fila[5] = dt.getString(5);
            fila[6] = dt.getString(6);
            fila[7] = dt.getString(7);
           
            modelo.addRow(fila);
            n++;
        }
        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }


    public String extraerEscala(String valor) {
        return Sql.getDato("IDESCALA", "ESCALA", "ABREVIATURA='" + valor + "' ");
    }
}
